package router

//
//import (
//	"kube-server/domain/dto"
//	"kube-server/initialize"
//	"kube-server/utils"
//	"net/http"
//	"regexp"
//	"strings"
//
//	"github.com/gin-gonic/gin"
//	"go.uber.org/zap"
//)
//
//// TokenMiddle jwt token 验证
//func TokenMiddle() gin.HandlerFunc {
//	return func(ctx *gin.Context) {
//
//		var (
//			url        string
//			authHeader string
//			parts      []string
//			matched    bool
//			isExpired  bool
//			claims     *utils.AccessTokenClaims
//			err        error
//		)
//
//		contextPath := initialize.GetConfigValue("server.context-path", "")
//		if !strings.HasPrefix(contextPath, "/") {
//			contextPath = "/" + contextPath
//		}
//
//		url = strings.TrimPrefix(ctx.Request.URL.String(), contextPath)
//
//		// 白名单验证
//		whiteUrl := strings.Split(initialize.GetConfigValue("server.white-url", ""), ",")
//		if len(whiteUrl) > 0 {
//			for _, item := range whiteUrl {
//				if item == url {
//					initialize.Logger.Info("白路由无需认证", zap.String("url", url))
//					ctx.Next()
//					return
//				}
//				if matched, _ = regexp.Match(item, []byte(url)); matched {
//					initialize.Logger.Info("白路由无需认证", zap.String("url", url))
//					ctx.Next()
//					return
//				}
//			}
//		}
//
//		// token 验证
//		authHeader = ctx.Request.Header.Get("Authorization")
//		if authHeader == "" {
//			initialize.Logger.Error("认证Token缺失", zap.String("url", url))
//			ctx.Abort()
//			ctx.JSON(http.StatusUnauthorized, dto.Fail(dto.AuthNotExist, "认证Token缺失"))
//			return
//		}
//
//		parts = strings.Split(authHeader, " ")
//		if !(len(parts) == 2 && parts[0] == "Bearer") {
//			initialize.Logger.Error("认证Token格式不正确", zap.String("url", url), zap.String("authHeader", authHeader))
//			ctx.Abort()
//			ctx.JSON(http.StatusUnauthorized, dto.Fail(dto.AuthNotExist, "认证Token格式不正确"))
//			return
//		}
//
//		if claims, isExpired, err = utils.AccessTokenVerify(parts[1]); err != nil {
//			if isExpired {
//				initialize.Logger.Error("Token过期", zap.String("url", url), zap.String("authHeader", authHeader))
//				if url == initialize.GetConfigValue[string]("auth.refresh-token-url", "") {
//					initialize.Logger.Info("刷新token路由", zap.String("url", url))
//					ctx.Next()
//				} else {
//					ctx.Abort()
//					ctx.JSON(http.StatusUnauthorized, dto.Fail(dto.AuthNotExist, err.Error()))
//				}
//			} else {
//				ctx.Abort()
//				initialize.Logger.Error("Token异常", zap.String("url", url), zap.String("authHeader", authHeader))
//				ctx.JSON(http.StatusUnauthorized, dto.Fail(dto.AuthNotExist, err.Error()))
//			}
//			return
//		}
//
//		ctx.Set("user", claims)
//		ctx.Next()
//	}
//}
